바이트 기반 스트림
✒️ 2025-05-15 13:36 내용 수정
바이트 단위로 데이터를 전송하는 스트림
- 모든 종류의 파일을 읽어올 수 있다.
- 음악, 영상, 이미지 등을 전송할 때는 바이트 기반 스트림으로 1 byte씩 전송하는 것이 좋다.
- 텍스트 파일을 읽어올 때 한글 등의 문자는 유니코드 구현이 어려워 깨진다.
- 보조 스트림 중 문자 변환 보조 스트림을 사용하면 해결할 수 있다.
- 보조 스트림 참고.
- 보조 스트림 중 문자 변환 보조 스트림을 사용하면 해결할 수 있다.
- IO는 Checked exception을 따른다. (IOException, 예외와 에러 필수)
- 바이트 기반 스트림은
~InputStream,~OutputStream식의 이름을 가진 클래스들이 있다.
- InputStream
- FileInputStream(파일), ByteArrayInputStream(메모리), PipedInputStream(프로세스), AudioInputStream(오디오) 클래스가 있다.
- FileInputStream을 가장 많이 사용한다.
- 이전에는 데이터들을 File와 시켜 저장하는 것이 주로 사용된 방식이었지만, 현재는 데이터 베이스에 주로 저장하기 때문
- InputStream과 OutputStream은 생성 시 경로 설정을 해야 한다.
- 절대경로 : 물리적 경로
- 상대경로 : 내 위치를 기준으로 하는 경로
- C++에서 불러오거나 저장할 파일의 경로를 설정하던 방법과 비슷하다.
- File 클래스 참고.
FileInputStream 인스턴스이름 = new FileInputStream(파일경로\\이름);
FileInputStream 인스턴스이름 = new FileInputStream(파일클래스객체);
| 메서드 | 설명 |
|---|---|
int read() |
문자를 1byte씩 읽고 반환. 더 이상 읽을 문자가 없으면 -1을 반환. |
int read(byte[] b) |
매개변수로 주어진 배열에 읽은 문자를 저장하고 실제로 읽은 수만큼 반환. - 더 이상 읽을 문자가 없으면 -1을 반환. - 배열 단위로 읽어오기 때문에 하나씩 읽어오는 것보다 속도가 빠르다. |
int read(byte[] b, int offset int len) |
매개변수로 주어진 배열에 정해진 범위만큼 읽어서 저장. - 시작 위치(offset), 길이(len) - 길이(len)를 배열의 길이로 설정하면 배열의 지우지 못한 공간으로 인해 글자가 잘린다. |
int available() |
스트림으로부터 읽어올 수 있는 데이터의 크기를 반환 |
close() |
스트림 사용을 종료하고 자원을 반환 |
- OutputStream
- FileOutputStream(파일), ByteArrayOutputStream(메모리), PipedOutputStream(프로세스), AudioOutputStream(오디오) 클래스가 있다.
- 읽어온 파일을 복사하거나 다운로드할 때 많이 사용한다.
- flush()를 해야 데이터를 실제 파일에 작성하는데, 현재는 close()에 auto flush가 있어 close()만 해도 된다. (물론 직접 flush()를 추가해도 된다)
- C++에서 ROOT 파일 작성할 때 파일을 꼭 닫아줘야 저장이 완료되었다. (
File.Close())
- C++에서 ROOT 파일 작성할 때 파일을 꼭 닫아줘야 저장이 완료되었다. (
FileOutputStream 인스턴스이름 = new FileOutputStream(파일경로\\이름, 이어쓰기 옵션);
FileOutputStream 인스턴스이름 = new FileOutputStream(파일클래스객체, 이어쓰기 옵션);
- 이어쓰기 true : 기존 내용에 이어서 작성, 파일이 없다면 새로 작성
- 이어쓰기 false : 기존 내용을 무시하고 덮어쓰기, 파일이 없다면 새로 작성
| 메서드 | 설명 |
|---|---|
void write(int b) |
단일값 b 출력 |
void write(byte[] b) |
매개변수로 주어진 배열의 모든 바이트를 출력. - 배열 단위로 작성하기 때문에 하나씩 작성하는 것보다 속도가 빠르다. |
void write(byte[] b, int offset int len) |
매개변수로 주어진 배열의 정해진 범위만큼 출력. 시작 위치(offset), 길이(len) |
void flush() |
출력 버퍼에 남은 모든 내용을 출력 |
close() |
스트림 사용을 종료하고 자원을 반환 |